#ifndef __IComponentFactory_H__
#define __IComponentFactory_H__

#include "compfwk/compfwk.h"
#include "compfwk/CRestriction.h"

namespace compfwk
{
    /**
     * \brief Interface that models component factories
     *
     * It encapsulates the creation of the components of one type
     */
    class IComponentFactory
    {
    public:
        //! Create the component of the specified type and return it in
        //! a polymorphic way
        virtual IComponentFactory* New( int a_eid ) const = 0;

        //! Returns the type of the component this factory creates
        virtual CString GetType( void ) const = 0;

        //! Returns the set of restrictions the component the 
        //! factory creates has
        virtual const CRstVector& GetRestrictions( void ) const = 0;
    };
}
#endif